package person.wend.javalearnexample.util;

import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class TimerExample {

    public static void main(String[] args) {
        // timerTaskTest();
        ScheduledExecutorServiceTest();
    }


    public static void timerTaskTest() {
        // 定义一个 TimerTask
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                System.out.println("TimerTask executed at " + System.currentTimeMillis());
            }
        };

        // 创建一个 Timer
        Timer timer = new Timer();

        // 安排任务在延迟 5 秒后执行一次
        timer.schedule(task, 5000);

        // 如果需要取消任务或计时器，请调用 cancel 方法
        // timer.cancel();
    }

    public static void  ScheduledExecutorServiceTest(){
        // 创建一个 ScheduledExecutorService
        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

        // 定义一个 Runnable 任务
        Runnable task = () -> System.out.println("ScheduledExecutorService executed at " + System.currentTimeMillis());

        // 安排任务在延迟 5 秒后执行一次
        scheduler.schedule(task, 5, TimeUnit.SECONDS);

        // 安排任务以固定速率每 2 秒执行一次（首次执行前有 1 秒延迟）
        scheduler.scheduleAtFixedRate(task, 1, 2, TimeUnit.SECONDS);

        // 安排任务以固定延迟每 2 秒执行一次（上一次执行完毕后再等待 2 秒）
        scheduler.scheduleWithFixedDelay(task, 1, 2, TimeUnit.SECONDS);

        // 关闭调度器（通常在应用结束时）
        // scheduler.shutdown();
    }
}
